import api from '@/api'

/**
 * 发送验证码到指定邮箱
 * @param {string} email - 接收验证码的邮箱
 * @param {string} [type='default'] - 验证码类型，如'reset-password'
 * @returns {Promise<Object>} 返回响应数据
 */
export const sendVerificationCode = async (email, type = 'default') => {
  try {
    const response = await api.post('/user/send-code', { email, type })
    return response.data
  } catch (error) {
    console.error('发送验证码失败:', error)
    // 保持原始错误对象，添加自定义消息
    error.customMessage = error.response?.data?.message || '发送验证码失败'
    throw error
  }
}

/**
 * 更新用户邮箱
 * @param {string} newEmail - 新邮箱地址
 * @param {string} verifyCode - 验证码
 * @returns {Promise<Object>} 返回响应数据，包含更新后的用户信息
 */
export const updateEmail = async (newEmail, verifyCode) => {
  try {
    const response = await api.put('/user/update-email', { newEmail, verifyCode })
    return response.data
  } catch (error) {
    console.error('更新邮箱失败:', error)
    // 保持原始错误对象，添加自定义消息
    error.customMessage = error.response?.data?.message || '更新邮箱失败'
    throw error
  }
}

/**
 * 更新用户密码
 * @param {string} oldPassword - 旧密码
 * @param {string} newPassword - 新密码
 * @returns {Promise<Object>} 返回响应数据
 */
export const updatePassword = async (oldPassword, newPassword) => {
  try {
    const response = await api.put('/user/update-password', { oldPassword, newPassword })
    return response.data
  } catch (error) {
    console.error('更新密码失败:', error)
    throw {
      message: error.response?.data?.message || '更新密码失败',
      status: error.response?.status,
      originalError: error
    }
  }
}

/**
 * 获取用户完整信息
 * @returns {Promise<Object>} 返回用户信息
 */
export const getUserProfile = async () => {
  try {
    const response = await api.get('/user/profile')
    return response.data
  } catch (error) {
    console.error('获取用户信息失败:', error)
    throw {
      message: error.response?.data?.message || '获取用户信息失败',
      status: error.response?.status,
      originalError: error
    }
  }
}

/**
 * 更新用户设置
 * @param {Object} settings - 用户设置
 * @param {string} [settings.theme] - 主题
 * @param {string} [settings.api_key] - API密钥
 * @param {string} [settings.model] - 模型
 * @param {number} [settings.temperature] - 温度值
 * @returns {Promise<Object>} 返回响应数据，包含更新后的设置
 */
export const updateUserSettings = async (settings) => {
  try {
    const response = await api.put('/user/profile/settings', settings)
    return response.data
  } catch (error) {
    console.error('更新用户设置失败:', error)
    throw {
      message: error.response?.data?.message || '更新用户设置失败',
      status: error.response?.status,
      originalError: error
    }
  }
}

/**
 * 通过验证码重置密码
 * @param {string} email - 用户邮箱
 * @param {string} verifyCode - 验证码
 * @param {string} newPassword - 新密码
 * @returns {Promise<Object>} 返回响应数据
 */
export const resetPasswordWithCode = async (email, verifyCode, newPassword) => {
  try {
    const response = await api.post('/user/reset-password', {
      email,
      verifyCode,
      newPassword
    })
    return response.data
  } catch (error) {
    console.error('重置密码失败:', error)
    // 保持原始错误对象，添加自定义消息
    error.customMessage = error.response?.data?.message || '重置密码失败'
    throw error
  }
}

export const userService = {
  /**
   * 发送验证码
   * @param {string} email - 邮箱地址
   * @returns {Promise} 发送结果
   */
  async sendVerifyCode(email) {
    try {
      const response = await api.post('/user/send-code', { email })
      return response.data
    } catch (error) {
      console.error('发送验证码失败:', error)
      throw error
    }
  },

  /**
   * 用户注册
   * @param {Object} userData - 用户注册数据
   * @param {string} userData.username - 用户名
   * @param {string} userData.email - 邮箱
   * @param {string} userData.password - 密码
   * @param {string} userData.verifyCode - 验证码
   * @returns {Promise} 注册结果
   */
  async register(userData) {
    try {
      const response = await api.post('/user/register', userData)
      return response.data
    } catch (error) {
      console.error('注册失败:', error)
      throw error
    }
  }
}

export default userService
